package com.demo.junit;

import com.demo.pojo.SysUser;
import com.demo.service.SysUserService;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;

@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisTemplateTester {

    @Autowired
    private SysUserService sysUserService;

    @Resource
    private StringRedisTemplate stringRedisTemplate; //操作字符串数据

    @Resource
    private RedisTemplate redisTemplate; //操作其他数据类型

    @Test
    public void testString(){
        stringRedisTemplate.opsForValue().set("name","czkt");
        Assert.assertEquals("czkt",stringRedisTemplate.opsForValue().get("name"));
    }

    @Test
    public void testObj(){
        SysUser sysUser = new SysUser("czkt", "123456", 1L, null);
        ValueOperations<String,SysUser> operations = redisTemplate.opsForValue();
        operations.set("ktjiaoyu", sysUser);
        SysUser u = operations.get("ktjiaoyu");
        System.out.println("user.usrName: "+u.getUsrName());
    }

    @Test
    public void testExpire() throws InterruptedException {
        SysUser user=new SysUser("cskt", "123456", 1L, null);
        ValueOperations<String, SysUser> operations=redisTemplate.opsForValue();
        operations.set("expire", user,100, TimeUnit.MILLISECONDS);
        Thread.sleep(1000);
        boolean exists=redisTemplate.hasKey("expire");
        if(exists){
            System.out.println("exists is true");
        }else{
             System.out.println("exists is false");
        }
    }

    @Test
    public void testHash() {
        HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();
        hash.put("hash","name","ktjiaoyu");
        String value=(String) hash.get("hash","name");
        System.out.println("hash name'value :"+value);
    }

    @Test
    public void testList() {
        ListOperations<String, String> list = redisTemplate.opsForList();
        list.leftPush("list","accp");
        list.leftPush("list","bdqn");
        list.leftPush("list","czkt");
        String value=(String)list.leftPop("list");
        System.out.println("list value :"+value.toString());
    }
    @Test
    public void testGetUser(){
        SysUser sysUser = sysUserService.getUser(2L);
        System.out.println("user.usrName:"+sysUser.getUsrName());
    }
}
